Il passaggio dai macro di stile C ai letterali tipizzati sicuri in C++ rappresenta un cambiamento fondamentale nell'usabilità della lingua, risolvendo il "trappola NULL" dove l'ambiguità del macro zero causa errori logici silenziosi.
1. Il Fallimento della Risoluzione degli Overload
Nei vecchi standard (C++98), NULL viene spesso definito come 0. Quando viene passato a funzioni sovraccaricate, il compilatore lo risolve NULL come un intero. Ciò è dimostrato da:
std::cout << "NULL è un int";
2. La Soluzione nullptr
C++11 ha introdotto nullptr, una parola chiave di tipo std::nullptr_t. A differenza del macro, non può essere convertito implicitamente in un tipo integrale (eccetto bool), garantendo che siano selezionati gli overload specifici per puntatori.
3. Collegamento e Interoperabilità
C++ moderno richiede extern "C" per prevenire il mangling dei nomi quando si collega con codice C (ad esempio, compilato con gcc). Mantenere puntatori tipizzati sicuri a questo confine è fondamentale.
$$\text{std::nullptr\_t} \neq \text{int}$$